import { Logs } from 'src/logs/logs.entity';
import { Roles } from 'src/roles/roles.entity';
import {
    Column,
    CreateDateColumn,
    Entity,
    JoinTable,
    ManyToMany,
    OneToMany,
    OneToOne,
    PrimaryGeneratedColumn,
    UpdateDateColumn,
} from 'typeorm';
import { Profile } from './profile.entity';

@Entity('user')
export class User {
    @PrimaryGeneratedColumn('uuid') // 设置主键
    id: string;

    @Column({
        type: 'varchar',
        length: 50,
        unique: true, // 是否必填
        comment: '用户名',
    })
    username: string;

    @Column({
        type: 'varchar',
        length: 50,
        comment: '密码',
        select: false,
    })
    password: string;

    @CreateDateColumn()
    createdAt: Date;

    @UpdateDateColumn()
    updatedAt: Date;

    // 外键约束  和日志表和user表的关系 是  一个用户可以对应多个日志  
    // user表和logs表 都要声明 一对多的关系
    // 第二次参数 的意思是 告诉查询语句 对应user字段去联合查询
    @OneToMany(() => Logs, (logs) => logs.user)
    logs: Logs[];  // 查询的结果应该是一个数组


    /* 
    多对多的关系 
    用户表和角色表
    一个用户可能有多个角色
    一个角色也可以分配给多个用户
    JoinTable 修饰符  生成一个user_roles的关系表
    */
    @ManyToMany(() => Roles, (roles) => roles.user)
    @JoinTable({ name: "users_roles" })
    roles: Roles[]

    /* 
    user表和profile表  一对一   第二个参数相当于是索引  对比profile表的userId
    */
    @OneToOne(() => Profile , (profile)=>profile.user)
    profile: Profile;

}
